/*
 * 字面量和运算符
 * 整数`1`、浮点数`1.2`、字符`a`、字符串"abc"、布尔值`true`和单元类型`()`可以用数字、
 * 文字或符号之类的`字面量`(literal)来表示
 * 另外，通过加前缀`0x`、`0o`、`0b`，数字可以用十六进制、八进制或二进制记法表示
 * 为了改善可读性，可以在数值字面量中插入下划线，比如：`1_000`等同于`1000`，`0.000_001`
 * 等同于`0.000001`
 * Rust 的运算符，优先级和类C语言类似。
 */

fn main() {
    // 整数相加
    println!("1+2={}", 1u32+2);

    // 整数相减
    println!("1-2={}", 1i32-2);
    // 如果改成1u32-2，编译失败

    // 短路求值的布尔逻辑
    println!("true AND false is {}", true && false);
    println!("true OR false is {}", true || false);
    println!("NOT true is {}", !true);

    // 位运算
    println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101);
    println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101);
    println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101);
    println!("1 << 5 is {}", 1u32 << 5);
    println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2);

    // 下划线提高数字可读性
    println!("One million is {}", 1_000_000u32);
}